<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-system-kernfs">
  <?dbhtml filename="kernfs.html"?>

  <title>Подготовка виртуальных файловых систем ядра</title>

  <indexterm zone="ch-system-kernfs">
    <primary sortas="e-/dev/">/dev/*</primary>
  </indexterm>

    <para>Различные файловые системы, экспортируемые ядром, используются для связи с ним. Они являются виртуальными, поскольку нет диска, на котором они бы использовались. Содержимое такие файловых систем располагается в памяти.</para>

    <para>Выполните команду, чтобы создать структуру каталогов, куда будет выполнено монтирование виртуальных файловых систем.</para>

<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>

  <sect2>
    <title>Создание начальных узлов устройств</title>

    <para>Когда ядро выполняет загрузку системы, ему требуется наличие нескольких устройств, таких как <filename
    class="devicefile">console</filename> и <filename
    class="devicefile">null</filename>. Эти узлы должны быть созданы на диске, для того, чтобы они были доступны после того, как запустится <command>udevd</command> и дополнительно, когда Linux запустится с <parameter>init=/bin/bash</parameter>. Для того, чтобы создать такие устройства, выполните команду:</para>

<screen><userinput>mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3</userinput></screen>

  </sect2>

  <sect2 id="ch-system-bindmount">
    <title>Монтирование и заполнение каталога /dev</title>

      <para>Рекомендуемый метод заполнения каталога (ссылки на устройства)<filename
      class="directory">/dev</filename>  -  примонтировать виртуальную файловую систему (такую, как <systemitem
      class="filesystem">tmpfs</systemitem>) в каталог <filename
      class="directory">/dev</filename>, и разрешить устройствам динамически создаваться на этих файловых системах по мере их обнаружения или возможности доступа к ним. Создание устройств обычно выполняется во время процесса загрузки программы Udev. Но поскольку в новой системе ещё отсутствует эта программа, следовательно устройства добавлены не будут. Необходимо вручную связать устройства из каталога  <filename class="directory">/dev</filename> хост-системы. Привязка - это особый вид монтирования, который позволяет создавать зеркало каталога в указанной точке монтирования в другом местоположении. Для того, чтобы это сделать, воспользуйтесь следующей командой:</para>

<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen>

  </sect2>

  <sect2 id="ch-system-kernfsmount">
    <title>Монтирование виртуальных файловых систем ядра</title>

      <para>Теперь, необходимо примонтировать оставшиеся виртуальные файловые системы:</para>

<screen><userinput>mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run</userinput></screen>

    <variablelist>
      <title>Значение параметров монтирования для devpts:</title>

      <varlistentry>
        <term><parameter>gid=5</parameter></term>
        <listitem>
          <para>Это гарантирует, что все созданные devpts узлы устройств будут принадлежать группе с идентификатором 5 (GID 5). Этот идентификатор будет использоваться позднее для группы <systemitem
          class="groupname">tty</systemitem>. Вместо имени группы, используется идентификатор, потому что в хост-системе, может использоваться иной идентификатор для группы <systemitem class="groupname">tty</systemitem>.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>mode=0620</parameter></term>
        <listitem>
          <para>Это гарантирует, что все созданные devpts узлы будут иметь режим 0620 (чтение пользователем, запись пользователем, запись группой). Одновременно с вышеуказанной командой такой подход гарантирует что devpts создаст узлы устройств в
           соответствии с  требованиями grantpt (), имея в виду вспомогательную библиотеку Glibc <command>pt_chown</command> ( по  умолчанию не установлена) которая не требуется.</para>
        </listitem>
      </varlistentry>

    </variablelist>

      <para>В некоторых хост-системах, каталог <filename>/dev/shm</filename> является символической ссылкой на <filename class="directory">/run/shm</filename>. /run tmpfs был установлен выше, поэтому  нужно создать только каталог.</para>

<screen><userinput>if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi</userinput></screen>

  </sect2>

</sect1>
